Mô hình xác xuất The Noisy Channel, giải pháp xử lý tín hiệu bị nhiễu sau truyền dẫn

Giai đoạn thứ 3 (1970-1983) chứng kiến sự phát triển mạnh mẽ của ngành xử lý ngôn ngữ tự nhiên và nhận dạng tiếng nói và đồng thời các thuật toán và mô hình đã được phát triển đó vẫn được duy trì phát triển.
Mô hình xác xuất The Noisy Channel, giải pháp xử lý tín hiệu bị nhiễu sau truyền dẫn
Mô hình xác xuất The Noisy Channel, giải pháp xử lý tín hiệu bị nhiễu sau truyền dẫn
Nguyễn Văn Hiến
21:02 ngày 29/10/2023
0
0

Mô hình xác xuất The Noisy Channel, giải pháp xử lý tín hiệu bị nhiễu sau truyền dẫn - Lịch sử ngành xử lý ngôn ngữ tự nhiên [1970-1983]

Giai đoạn thứ 3 (1970-1983) chứng kiến sự phát triển mạnh mẽ của ngành xử lý ngôn ngữ tự nhiên và nhận dạng tiếng nói và đồng thời các thuật toán và mô hình đã được phát triển đó vẫn được duy trì phát triển. Trong giai đoạn này, lý thuyết xác xuất thống kê có đóng góp quan trọng trong lĩnh vực nhận dạng giọng nói. Đặc biệt là việc ứng dụng các mô hình Hiden Markov Model, và mô hình The Noisy Channel.

Mô hình xử lý thông tin nhiễu - The Noisy Channel

Mô hình the noisy channel dựa trên lý thuyết: Giả sử thông tin là có độ dài một (bit) bị nhiễu (mất mát, biến đổi) khi truyền qua các kênh truyền dẫn như dây đồng, dây cáp quang (xác suất này được gọi là xác suất lỗi.). Hãy phục hồi thông tin trở về trạng thái ban đầu.

Để giải quyết bài toán này, nó cho phép sử dụng 2 biến: Mô hình nguồn (Source Model) và Mô hình nhiễu (Noise Model)

- Mô hình nguồn (Source Model): Phần này mô tả khả năng xuất hiện của một từ, cụm từ hoặc chuỗi từ trong ngôn ngữ nguồn. Nó có thể dựa trên các xác suất xuất hiện của các từ hoặc các thông tin ngữ cảnh.

- Mô hình nhiễu (Noise Model): Phần này mô tả cách mà thông điệp có thể bị nhiễu hoặc sai sót trong quá trình truyền tải qua channel. Nó cung cấp thông tin về cách các từ hoặc phần của thông điệp ban đầu có thể bị thay đổi hoặc sai sót thành thông điệp mà ta đã nhận được.

Ví dụ, nếu xác suất lỗi của kênh truyền thông là 0,1, thì ma trận chuyển đổi sẽ như sau:

0 | 1
---|---
0 | 0.9 | 0.1
1 | 0.1 | 0.9

Ma trận chuyển đổi này cho biết rằng xác suất của một bit 0 được truyền qua kênh truyền thông và vẫn là 0 là 0,9. Xác suất của một bit 1 được truyền qua kênh truyền thông và vẫn là 1 cũng là 0,9. Xác suất của một bit 0 được truyền qua kênh truyền thông và bị biến đổi thành 1 là 0,1. Xác suất của một bit 1 được truyền qua kênh truyền thông và bị biến đổi thành 0 cũng là 0,1.

Mô hình the noisy channel là một mô hình đơn giản, nhưng nó có thể được sử dụng để mô tả một loạt các kênh truyền thông thực tế. Mô hình này được sử dụng trong các ứng dụng như dịch máy, xử lý văn bản và thông tin, cũng như trong các hệ thống gợi ý ngôn ngữ tự nhiên.

Ví dụ về mô hình nhiễu bằng Java

Dưới đây là một ví dụ bằng Java sử dụng thuật toán the noisy channel để phục hồi một từ vựng bị biến đổi trở về trạng thái ban đầu: Ví dụ này định nghĩa một từ vựng có hai từ: "hello" và "world". Xác suất lỗi của kênh truyền thông là 0,1, có nghĩa là mỗi bit có thể bị biến đổi thành một bit khác với xác suất 0,1.

Ví dụ này cũng định nghĩa một từ vựng bị biến đổi là "helloo". Từ này được tạo ra bằng cách biến đổi một bit trong từ "hello" thành một bit khác.

Hệ thống noisy channel sẽ sử dụng xác suất lỗi để tính toán khả năng của mỗi từ trong từ vựng. Từ có khả năng cao nhất sẽ được trả về là từ được phục hồi.

Trong trường hợp này, từ được phục hồi là "hello". Điều này là do xác suất của từ "hello" là cao hơn xác suất của từ "world".

import java.util.Map;
import java.util.HashMap;

public class NoisyChannel {

    private Map<String, String> vocabulary;
    private Map<String, Double> probabilities;

    public NoisyChannel(Map<String, String> vocabulary, Map<String, Double> probabilities) {
        this.vocabulary = vocabulary;
        this.probabilities = probabilities;
    }

    public String decode(String noisyWord) {
        // Xác định khả năng của mỗi từ trong từ vựng
        Map<String, Double> probabilitiesOfWords = new HashMap<>();
        for (String word : vocabulary.keySet()) {
            double probability = 1;
            for (int i = 0; i < noisyWord.length(); i++) {
                char noisyCharacter = noisyWord.charAt(i);
                char originalCharacter = vocabulary.get(word).charAt(i);
                probability *= probabilities.get(noisyCharacter + "-" + originalCharacter);
            }
            probabilitiesOfWords.put(word, probability);
        }

        // Trả về từ có khả năng cao nhất
        String mostProbableWord = "";
        double maxProbability = Double.MIN_VALUE;
        for (String word : probabilitiesOfWords.keySet()) {
            double probability = probabilitiesOfWords.get(word);
            if (probability > maxProbability) {
                maxProbability = probability;
                mostProbableWord = word;
            }
        }
        return mostProbableWord;
    }

    public static void main(String[] args) {
        // Định nghĩa từ vựng và xác suất lỗi
        Map<String, String> vocabulary = new HashMap<>();
        vocabulary.put("hello", "xin chào");
        vocabulary.put("world", "thế giới");

        Map<String, Double> probabilities = new HashMap<>();
        probabilities.put("0-1", 0.1);
        probabilities.put("1-0", 0.1);
        probabilities.put("0-0", 0.9);
        probabilities.put("1-1", 0.9);

        // Tạo hệ thống noisy channel
        NoisyChannel system = new NoisyChannel(vocabulary, probabilities);

        // Tạo từ vựng bị biến đổi
        String noisyWord = "helloo";

        // Phục hồi từ vựng bị biến đổi
        String restoredWord = system.decode(noisyWord);
        System.out.println("Từ vựng bị biến đổi: " + noisyWord);
        System.out.println("Từ vựng được phục hồi: " + restoredWord);
    }
}

 

KẾT QUẢ

Từ vựng bị biến đổi: helloo
Từ vựng được phục hồi: hello

Tác giả

Nguyễn Văn Hiến

Tôi là Nguyễn Văn Hiến, Founder của Tummosoft. Tôi có hơn 20 năm lập trình, vào thời điểm máy vi tính còn là tài sản quý giá của người giàu. Nhưng sức đam mê công nghệ của tôi đã giúp tôi vượt qua những khó khăn và theo đuổi nghề lập trình. Đối với tôi, sáng tạo các sản phẩm công nghệ bằng ngôn ngữ cũng giống như người nghệ sĩ sáng tác những họa phẩm.

Tổng quan về xử lý ngôn ngữ tự nhiên

Chatbot ngày nay đã vượt qua vai trò là công cụ tiêu khiển, nó thông minh hơn, hiểu biết nhiều vấn đề hơn, biết lập trình và biết xử lý cả tình huống…. Và để có được thành tựu như hôm nay, chatbot đã khởi đầu bằng công nghệ kiểu như robot ELIZA.

Hệ thống lý luận Bayesian

Từ những năm 1960, việc sử dụng kho ngữ liệu lớn để xử lý ngôn ngữ tự nhiên bắt đầu được định hình. Bộ sưu tập Ameriacan English đã tổng hợp được hơn một triệu văn bản từ các tạp chí, báo, tiểu thuyết...

Mô hình xác xuất The Noisy Channel, giải pháp xử lý tín hiệu bị nhiễu sau truyền dẫn

Giai đoạn thứ 3 (1970-1983) chứng kiến sự phát triển mạnh mẽ của ngành xử lý ngôn ngữ tự nhiên và nhận dạng tiếng nói và đồng thời các thuật toán và mô hình đã được phát triển đó vẫn được duy trì phát triển.

Mô hình ẩn Hidden Markov Model (HMM), bước tiến lớn trong lĩnh vực trí tuệ nhân tạo

Mô hình ẩn Hidden Markov Model (HMM) được phát triển trên lý thuyết xác xuất thông kê, giả định rằng: Có 2 nguồn thông tin: (1) Một nguồn thì có thể thu thập được; và nguồn thứ (2) thì không thu thập được (bị ẩn). Và chúng ta có thể giải mã nguồn thông tin thứ 2 qua xác xuất và suy luận.

Xác suất có điều kiện (conditional probability) và ví dụ bằng Java

Xác suất có điều kiện là bài toán dùng để tính một sự kiện B có (hoặc không) khả năng xảy ra khi biết rằng sự kiện A đã xảy ra. Công thức dùng để tính xác xuất có điều kiện là P(B|A).

Automata không có gì khó hiểu!

Khi nhắc đến Lý thuyết tính toán (Theory of Computation) nghĩa là chúng ta đang bàn đến một nhánh của Khoa học máy tính (Coputer Science), lĩnh vực có thể giải quyết các vấn đề tính toán bằng cách sử dụng thuật toán (algorithm) và các mô hình tính toán (model of computation).